"""
主题: 发送与接收大型数组
问题: 你要通过网络连接发送和接受连续数据的大型数组，并尽量减少数据的复制操作。
提示 : 
"""

'''利用 memoryviews 来发送和接受大数组'''

def send_from(arr, dest):
    view = memoryview(arr).cast('B')
    while len(view):
        nsent = dest.send(view)
        view = view[nsent:]

def recv_into(arr, source):
    view = memoryview(arr).cast('B')
    while len(view):
        nrecv = source.recv_into(view)
        view = view[nrecv:]

if __name__ == '__main__':
    from socket import socket, AF_INET, SOCK_STREAM
    s = socket(AF_INET, SOCK_STREAM)
    s.bind(('', 20001))
    s.listen(1)
    c, _ = s.accept()

    import numpy
    a = numpy.arange(0.0, 500000000.0)
    send_from(a, c)  

    s.close()
